import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
# (1)	数据读取及预处理（40分）
df=pd.read_csv('train.csv')
# ①	读入数据集（5分）

# ②	读取前5行数据信息（5分）
print(df[:5])
# ③	从数据中获取'temp', 'atemp', 'hum', 'windspeed'列作为特征（5分）
x=df[['temp','atemp','humidity','windspeed']]

# ④	从数据中获取'cnt'作为标签值（5分）
y=df['count']
# ⑤	对特征求皮尔逊系数（5分）
cor=x.corr()
# ⑥	使用皮尔逊系数绘制热图（5分）
sns.heatmap(cor,annot=True)
plt.show()
# ⑦	将皮尔逊系数大于1特征进行处理（删除1项）（5分）
del x['atemp']
# ⑧	使用留出法切分数据，比例7:3（5分）
from sklearn.model_selection import train_test_split
train_x,test_x,train_y,test_y=train_test_split(x,y,train_size=0.7)
# (2)	模型处理及评估（35分）

# ①	创建管道，内部填写后续三项内容（5分）
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler,PolynomialFeatures
from sklearn.linear_model import LinearRegression
# ②	管道中先进行多项式处理，使用3次方（5分）
model=Pipeline([('poly',PolynomialFeatures(degree=3)),
                ('s',StandardScaler()),
                ('lr',LinearRegression())])
# ③	管道中进行标准化处理（5分）
# ④	管道中使用线性回归（5分）
# ⑤	拟合训练集数据（5分）
model.fit(train_x,train_y)
# ⑥	打印预测值（5分）
print(model.predict(test_x))

test_h=model.predict(test_x)
# ⑦	打印输出模型的均方误差（5分）
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
from sklearn.metrics import mean_absolute_error
print(mean_squared_error(test_y,test_h))
print(r2_score(test_y,test_h))
print(mean_absolute_error(test_y,test_h))